{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "80040c45-2a3a-4195-9a56-9b8c542cacae",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "zhipuai_api_key = os.getenv('ZHIPU_API_KEY')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "679dd99d-715d-4d80-b833-1cab9fc62cc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from zhipuai import ZhipuAI\n",
    "\n",
    "client = ZhipuAI(api_key=zhipuai_api_key)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "eeea9dfc-42fa-4c8a-ade5-e71f87d849fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Completion(model='glm-4-flash', created=1744688943, choices=[CompletionChoice(index=0, finish_reason='stop', message=CompletionMessage(content='将以色列描述为“喜欢战争”是不准确的，这种说法过于简化了复杂的国际关系和历史背景。以下是一些可能导致以色列在历史上经常卷入冲突的原因：\\n\\n1. **地理位置**：以色列位于中东地区，这是一个多民族、多宗教、多文化交织的地区，历史上一直是各个大国争夺的焦点。以色列的地理位置使其成为中东地区的一个战略要地。\\n\\n2. **历史背景**：以色列成立于1948年，当时是在巴勒斯坦地区犹太人和阿拉伯人之间的一系列冲突之后。以色列的建国过程涉及了与周边阿拉伯国家的战争，这些战争包括1948年的独立战争、1956年的苏伊士运河危机、1967年的六日战争和1973年的第四次中东战争。\\n\\n3. **安全担忧**：以色列面临着来自周边国家的安全威胁，特别是来自伊朗的核武器发展计划以及来自哈马斯、真主党等武装组织的威胁。\\n\\n4. **宗教和民族认同**：以色列是一个犹太国家，其成立是基于犹太人的民族自决权。对于许多犹太人来说，保护以色列的安全和存在是至关重要的。\\n\\n5. **国际政治**：以色列在国际政治中扮演着复杂的角色，其与美国的紧密关系、对以色列的支持以及对巴勒斯坦问题的立场都可能导致其卷入冲突。\\n\\n6. **历史记忆**：以色列社会深受大屠杀（Holocaust）的影响，这强化了对国家安全的重视，以及对任何可能威胁其存在的势力的警惕。\\n\\n需要注意的是，以色列并非总是主动寻求战争，而是经常处于被迫自卫或应对外部威胁的状态。同时，以色列也有和平的努力，包括与巴勒斯坦的和平谈判和与其他国家的外交关系。对以色列的战争行为应从多方面、多角度进行理解和分析，而不是简单地归因于“喜欢战争”。', role='assistant', tool_calls=None))], request_id='20250415114852e25e5000d4b044c2', id='20250415114852e25e5000d4b044c2', usage=CompletionUsage(prompt_tokens=22, completion_tokens=368, total_tokens=390))"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prompt = \"以色列为什么喜欢战争？\"\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4-flash\",\n",
    "    messages=[\n",
    "        {\"role\":\"user\",\"content\":\"你好\"},\n",
    "        {\"role\":\"assistant\",\"content\":\"我是LinS人工值能助手\"},\n",
    "        {\"role\":\"user\",\"content\":prompt}\n",
    "    ]\n",
    ")\n",
    "response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f5e8b189-33a4-45fc-9e11-60171cbb3a4c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'将以色列描述为“喜欢战争”是不准确的，这种说法过于简化了复杂的国际关系和历史背景。以下是一些可能导致以色列在历史上经常卷入冲突的原因：\\n\\n1. **地理位置**：以色列位于中东地区，这是一个多民族、多宗教、多文化交织的地区，历史上一直是各个大国争夺的焦点。以色列的地理位置使其成为中东地区的一个战略要地。\\n\\n2. **历史背景**：以色列成立于1948年，当时是在巴勒斯坦地区犹太人和阿拉伯人之间的一系列冲突之后。以色列的建国过程涉及了与周边阿拉伯国家的战争，这些战争包括1948年的独立战争、1956年的苏伊士运河危机、1967年的六日战争和1973年的第四次中东战争。\\n\\n3. **安全担忧**：以色列面临着来自周边国家的安全威胁，特别是来自伊朗的核武器发展计划以及来自哈马斯、真主党等武装组织的威胁。\\n\\n4. **宗教和民族认同**：以色列是一个犹太国家，其成立是基于犹太人的民族自决权。对于许多犹太人来说，保护以色列的安全和存在是至关重要的。\\n\\n5. **国际政治**：以色列在国际政治中扮演着复杂的角色，其与美国的紧密关系、对以色列的支持以及对巴勒斯坦问题的立场都可能导致其卷入冲突。\\n\\n6. **历史记忆**：以色列社会深受大屠杀（Holocaust）的影响，这强化了对国家安全的重视，以及对任何可能威胁其存在的势力的警惕。\\n\\n需要注意的是，以色列并非总是主动寻求战争，而是经常处于被迫自卫或应对外部威胁的状态。同时，以色列也有和平的努力，包括与巴勒斯坦的和平谈判和与其他国家的外交关系。对以色列的战争行为应从多方面、多角度进行理解和分析，而不是简单地归因于“喜欢战争”。'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response.choices[0].message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "726c9abc-cebd-4f9e-9b23-1df6006e6a09",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "关于以色列喜欢战争的说法并不准确，这种观点可能源于对以色列历史和地区冲突的误解。以下是一些可能导致这种观点的原因：\n",
      "\n",
      "1. **历史背景**：以色列成立于1948年，是在巴勒斯坦地区的一次民族主义运动中建立的。自建国以来，以色列就面临着来自周边阿拉伯国家的多次冲突和战争，包括1948年的独立战争、1956年的苏伊士危机、1967年的六日战争和1973年的第四次中东战争等。\n",
      "\n",
      "2. **安全担忧**：以色列认为其存在受到来自周边阿拉伯国家的威胁，特别是来自伊朗的核武器计划。以色列政府强调其军事行动是为了自卫和确保国家的安全。\n",
      "\n",
      "3. **领土争端**：以色列与巴勒斯坦之间的领土争端是中东地区冲突的核心问题之一。以色列在1967年六日战争中占领了西岸和加沙地带，这些地区的控制权问题一直是双方冲突的焦点。\n",
      "\n",
      "4. **媒体和公众形象**：以色列在国际媒体上的形象可能被某些报道所塑造，这些报道可能强调以色列的军事行动而忽略了复杂的背景和原因。\n",
      "\n",
      "5. **国际政治**：以色列在国际政治中的立场和行动，如与美国的紧密关系，也可能导致某些观点认为以色列倾向于军事解决冲突。\n",
      "\n",
      "然而，这些原因并不意味着以色列“喜欢”战争。实际上，以色列人民和其他国家的人民一样，希望和平与稳定。以色列的军事行动通常是在其政府认为这是保护国家利益和公民安全的必要手段时采取的。和平解决冲突一直是国际社会努力的目标，包括以色列在内的所有国家都希望实现这一目标。"
     ]
    }
   ],
   "source": [
    "# prompt = \"以色列为什么喜欢战争？\"\n",
    "# response = client.chat.completions.create(\n",
    "#     model=\"glm-4-flash\",\n",
    "#     messages=[\n",
    "#         {\"role\":\"user\",\"content\":\"你好\"},\n",
    "#         {\"role\":\"assistant\",\"content\":\"我是LinS人工值能助手\"},\n",
    "#         {\"role\":\"user\",\"content\":prompt}\n",
    "#     ],\n",
    "#     stream = True\n",
    "# )\n",
    "# for chunk in response:\n",
    "#     print(chunk.choices[-1].delta.content,end=\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ddb4566b-1d33-4c00-825a-6a41131ed7aa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "我是由智谱 AI 公司开发的人工智能助手，我的名字叫做 ChatGLM。"
     ]
    }
   ],
   "source": [
    "prompt = \"你是哪个公司的？\"\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4-flash\",\n",
    "    messages=[\n",
    "        {\"role\":\"user\",\"content\":\"你好\"},\n",
    "        {\"role\":\"assistant\",\"content\":\"我是人工智能助手\"},\n",
    "        {\"role\":\"user\",\"content\":prompt}\n",
    "    ],\n",
    "    stream = True\n",
    ")\n",
    "for chunk in response:\n",
    "    print(chunk.choices[0].delta.content,end=\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49df4510-6c01-4231-a0ba-2d7a3279c8da",
   "metadata": {},
   "source": [
    "封装glm4-flask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1f005871-d55a-40e2-adee-9acb195b4117",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'langchain'",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mModuleNotFoundError\u001B[0m                       Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[7], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mlangchain\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mllms\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mbase\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m LLM\n\u001B[0;32m      2\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mzhipuai\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m ZhipuAI\n\u001B[0;32m      3\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01mlangchain_core\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mmessages\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mai\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m AIMessage\n",
      "\u001B[1;31mModuleNotFoundError\u001B[0m: No module named 'langchain'"
     ]
    }
   ],
   "source": [
    "from langchain.llms.base import LLM\n",
    "from zhipuai import ZhipuAI\n",
    "from langchain_core.messages.ai import AIMessage\n",
    "\n",
    "class ChatLYY(LLM):\n",
    "    history = []\n",
    "    client:object = None\n",
    "\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.client = ZhipuAI(api_key=zhipuai_api_key)\n",
    "\n",
    "    @property\n",
    "    def _llm_type(self):\n",
    "        return \"ChatGLN4\"\n",
    "\n",
    "    def invoke(self,prompt,history=[]):\n",
    "        if history is None:\n",
    "            history=[]\n",
    "        history.append({\"role\":\"user\",\"content\":prompt})\n",
    "        response = self.client.chat.completions.create(\n",
    "            model=\"glm-4-flash\",\n",
    "            messages=history\n",
    "        )\n",
    "\n",
    "        result = response.choices[0].message.content\n",
    "        return AIMessage(content=result)\n",
    "\n",
    "    def _call(self,prompt,history=[]):\n",
    "        return self.invoke(prompt,history)\n",
    "\n",
    "    def stream(self,prompt,history=[]):\n",
    "        if history is None :\n",
    "            history=[]\n",
    "        history.append({\"role\":\"user\",\"content\":prompt})\n",
    "        response = self.client.chat.completions.create(\n",
    "            model=\"glm-4-flash\",\n",
    "            message=history,\n",
    "            stream=True\n",
    "        )\n",
    "        for chunk in response:\n",
    "            yield chunk.chioces[0].delta.content\n",
    "\n",
    "    \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "53a5a7d2-744d-4d39-9654-66c50011fbf7",
   "metadata": {},
   "outputs": [],
   "source": [
    "llm = ChatGLN4()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8324d23d-c50b-420f-bbfb-d0e94aca4117",
   "metadata": {},
   "outputs": [],
   "source": [
    "llm.invoke(\"讲一个笑话\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
